/**
描述
  编写一个程序，将输入字符串中的字符按如下规则排序。
  规则 1 ：英文字母从 A 到 Z 排列，不区分大小写。
  如，输入： Type 输出： epTy
  规则 2 ：同一个英文字母的大小写同时存在时，按照输入顺序排列。
  如，输入： BabA 输出： aABb
  规则 3 ：非英文字母的其它字符保持原来的位置。

  如，输入： By?e 输出： Be?y
  数据范围：输入的字符串长度满足 1 \le n \le 1000 \1≤n≤1000 
  
  示例1
  输入：
    A Famous Saying: Much Ado About Nothing (2012/8).
  输出：
  A aaAAbc dFgghh: iimM nNn oooos Sttuuuy (2012/8).
*/
const readline = require('readline')
const rl = readline.createInterface({
  input:process.stdin,
  output:process.stdout
})

function transform(input) {
  // 先收集英文字母，对其进行排序
  let worlds = input.match(/[a-z]+/ig).join('').split('')
  // 升序排列（因为前面全都转化成小写，故不会改变同一字母大小写的相对顺序）
  worlds.sort((a, b) => { a = a.toLowerCase(); b = b.toLowerCase(); return a < b ? -1 : 0 })
  let inputArr = input.split('')
  // 将 排序后 worlds 字母替换 输入的字母， 非英文字母不替换
  inputArr.forEach((item, idx) => {
    if(/[a-z]/i.test(item)) {
      inputArr[idx] = worlds[0]
      worlds.shift()
    }
  })
  console.log(inputArr.join(''))
}

// 本地测试
// let input = 'A Famous Saying: Much Ado About Nothing (2012/8).'
// transform(input)

// 提交测试
rl.on('line', (line) => {
  if (line) {
    // 处理接收
    transform(line)
  }
})